class code1 {
    public String validIPAddress(String queryIP) {
        if(queryIP.indexOf(".")>=0 && check4(queryIP)) return "IPv4";
        if(queryIP.indexOf(":")>=0 && check6(queryIP)) return "IPv6";
        return "Neither";
    }

    public boolean check4(String queryIP) {
        //需要转义
        //-1：防止出现192.168.1.1.会保留最后的空字符
        String[] split = queryIP.split("\\.",-1);
        //个数不为4个
        if(split.length != 4) {
            return false;
        }

        for(String s:split) {
            //长度不在1-3之间
            if(s.length()>3 || s.length() == 0) {
                return false;
            }
            //有前导0，并且长度不为1:  01这种就是有问题
            if(s.charAt(0)=='0' && s.length()!=1) {
                return false;
            }
            int x = 0;
            for(int i=0;i<s.length();i++) {
                char c = s.charAt(i);
                if(!Character.isDigit(c)) return false;
                x = x*10 + (c-'0');
            }
            if(x > 255) {
                return false;
            }
        }
        return true;
    }

    public boolean check6(String queryIP) {
        //需要转义
        //-1：防止出现192.168.1.1.会保留最后的空字符
        String[] split = queryIP.split("\\:",-1);
        //个数不为4个
        if(split.length != 8) {
            return false;
        }
        for(String s:split) {
            //长度不在1-3之间
            if(s.length()>4 || s.length() == 0) {
                return false;
            }
            //ipv6允许前导0
            for(int i=0;i<s.length();i++) {
                char c = s.charAt(i);
                //不是数字 + 字母不在a-f之间
                if(!Character.isDigit(c) && (!(Character.toLowerCase(c)>='a'&&Character.toLowerCase(c)<='f'))) return false;
            }

        }
        return true;
    }

}